#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>

typedef int QueueDataType;

typedef struct QueueNode
{
  QueueDataType data;
  struct QueueNode* next;
}QueueNode;

typedef struct Queue
{
  QueueNode* head;
  QueueNode* tail;
}Queue;

void QueueInit(Queue* q);
void QueuePush(Queue* q, const QueueDataType x);

void QueuePop(Queue* q);
QueueDataType QueueHeadData(Queue* q);
QueueDataType QueueTailData(Queue* q);
_Bool QueueEmpty(Queue* q);
